Package com.golden.gamedev.engine.audio

Source Code of com.golden.gamedev.engine.audio.JavaLayerMp3Renderer

/*
* Copyright (c) 2008 Golden T Studios.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.golden.gamedev.engine.audio;

// JFC
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.URL;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.FactoryRegistry;
import javazoom.jl.player.Player;

import com.golden.gamedev.engine.BaseAudioRenderer;

/**
* Play MP3 sound (*.mp3) using JavaLayer library, <br>
* JavaLayer library is available to download at <a
* href="http://www.javazoom.net/javalayer/javalayer.html" target="_blank">
* http://www.javazoom.net/javalayer/javalayer.html</a>.
* <p>
*
* Make sure the downloaded library is included into your game classpath before
* using this audio renderer.
* <p>
*
* <b>Note: GTGE is not associated in any way with JavaLayer, this class is only
* interfacing JavaLayer to be used in GTGE. <br>
* This class is created and has been tested to be working properly using
* <em>JavaLayer 1.0</em>.</b>
* <p>
*
* How-to-use <code>JavaLayerMp3Renderer</code> in GTGE Frame Work :
*
* <pre>
* public class YourGame extends Game {
*  
*   protected void initEngine() {
*     super.initEngine();
*     // set sound effect to use mp3
*     bsSound.setSampleRenderer(new JavaLayerMp3Renderer());
*     // set music to use mp3
*     bsMusic.setSampleRenderer(new JavaLayerMp3Renderer());
*   }
* }
* </pre>
*/
public class JavaLayerMp3Renderer extends BaseAudioRenderer {
 
  /** **************************** MP3 PLAYER ********************************* */
 
  private Player player;
 
  /** ************************************************************************* */
  /** ***************************** CONSTRUCTOR ******************************* */
  /** ************************************************************************* */
 
  /**
   * Creates a new instance of <code>JavaLayerMp3Renderer</code>.
   */
  public JavaLayerMp3Renderer() {
  }
 
  /**
   * <i>Please refer to super class method documentation.</i>
   */
  public boolean isAvailable() {
    return true;
  }
 
  /**
   * <i>Please refer to super class method documentation.</i>
   */
  protected void playSound(final URL audiofile) {
    Thread thread = new Thread() {
     
      public void run() {
        try {
          JavaLayerMp3Renderer.this.player = new Player(
                  new BufferedInputStream(audiofile.openStream()),
                  FactoryRegistry.systemRegistry()
                          .createAudioDevice());
         
          JavaLayerMp3Renderer.this.player.play();
        }
        catch (IOException e) {
          JavaLayerMp3Renderer.this.status = BaseAudioRenderer.ERROR;
          System.err.println("Can not load audiofile (" + audiofile
                  + ": " + e);
        }
        catch (JavaLayerException e) {
          JavaLayerMp3Renderer.this.status = BaseAudioRenderer.ERROR;
          System.err.println("Problem playing audio: " + e);
        }
      }
    };
    thread.setDaemon(true);
    thread.start();
  }
 
  /**
   * <i>Please refer to super class method documentation.</i>
   */
  protected void replaySound(URL audiofile) {
    this.playSound(audiofile);
  }
 
  /**
   * <i>Please refer to super class method documentation.</i>
   */
  protected void stopSound() {
    if (this.player != null) {
      this.player.close();
      this.player = null;
    }
  }
 
  /**
   * <i>Please refer to super class method documentation.</i>
   */
  public int getStatus() {
    if (this.player != null) {
      // return EOS if the sound has been completed played
      return (this.player.isComplete()) ? BaseAudioRenderer.END_OF_SOUND
              : super.getStatus();
    }
   
    return super.getStatus();
  }
 
  /**
   * <i>Please refer to super class method documentation.</i>
   */
  public boolean isVolumeSupported() {
    return false;
  }
 
  /**
   * Testing the MP3 Player.
   */
  public static void main(String args[]) {
    BaseAudioRenderer mp3 = new JavaLayerMp3Renderer();
   
    String music1 = "file:///d:/golden t studios/trash/sound/MUSIC1.MP3";
    String music2 = "file:///d:/golden t studios/trash/sound/music2.mp3";
   
    if (args != null) {
      if (args.length >= 1) {
        music1 = music2 = args[0];
      }
      if (args.length >= 2) {
        music1 = args[1];
      }
    }
   
    // test first song
    try {
      mp3.play(new URL(music1));
    }
    catch (Exception e) {
      e.printStackTrace();
    }
   
    // hear some music
    int update = 0;
    while (mp3.getStatus() == BaseAudioRenderer.PLAYING) {
      try {
        Thread.sleep(1000);
      }
      catch (InterruptedException e) {
      }
     
      System.out.println(update++);
     
      if (update > 4) {
        mp3.stop();
      }
    }
   
    // first song stopped
    System.out.println("end-song");
   
    // test second song
    try {
      mp3.play(new URL(music2));
    }
    catch (Exception e) {
      e.printStackTrace();
    }
   
    // wait until complete
    while (mp3.getStatus() == BaseAudioRenderer.PLAYING) {
      try {
        Thread.sleep(1000);
      }
      catch (InterruptedException e) {
      }
     
      System.out.println(update++);
    }
   
    System.out.println("end-song 2");
  }
 
}
TOP

Related Classes of com.golden.gamedev.engine.audio.JavaLayerMp3Renderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.